#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
int n, m;
int server[MAX_SIZE][MAX_SIZE];
bool visited[MAX_SIZE][MAX_SIZE];

// 深度优先搜索(DFS)函数， 用于计算从(i, j)位置开始能够形成的局域网大小
int dfs(int i, int j) 
{
	// 如果坐标越界或者当前位置没有服务器， 返回0
	if (i < 0 || i >= n || j < 0 || j >= m || server[i][j] == 0) {
		return 0;
	} 
	//如果当前位置已经访问过， 也返回0
	if (visited[i][j]) {
		return 0;
	} 
	//标记当前位置为已访问
	visited[i][j] = true;
	// 从当前位置开始， 局域网的大小至少为1
	int count = 1;
	// 递归地搜索上下左右四个方向， 并累加局域网的大小
	count += dfs(i - 1, j);
	count += dfs(i + 1, j);
	count += dfs(i, j - 1);
	count += dfs(i, j + 1);
	// 返回局域网的总大小
	return count;
} 
int main() 
{
	// 读取矩阵的行数和列数
	scanf("%d %d", &n, &m);
	
	// 读取服务器矩阵
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf("%d", &server[i][j]);
			visited[i][j] = false; // 初始化访问状态为未访问
		}
	}

	int ans = 0; // 存储最大局域网的大小
	// 遍历每个位置， 使用DFS寻找最大的局域网
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			// 只有在当前位置有服务器且未访问过时才进行DFS搜索
			if (server[i][j] == 1 && !visited[i][j]) {
				int currentNetworkSize = dfs(i, j);
				if (currentNetworkSize > ans) {
					ans = currentNetworkSize; // 更新最大局域网的大小
				}
			}
		}
	} 
	//输出最大局域网包含的服务器个数
	printf("%d\n", ans);
	return 0;
}

